/**
 * Bomb 构造函数：模拟定时炸弹
 * 功能：
 *  - start()：启动定时器，3秒后输出“爆炸”信息
 *  - clear()：清除定时器，取消爆炸
 */
function Bomb() {
  // 存储定时器 ID（用于后续清除定时器）
  this.timerId = null;

  /**
   * 启动炸弹：3秒后爆炸
   * @param {string} bombName - 炸弹名称（用于区分不同炸弹）
   */
  this.start = function (bombName) {
    console.log(`炸弹 ${bombName}：已启动，3秒后爆炸！`);
    
    // 启动定时器（3000 毫秒 = 3 秒），并保存定时器 ID
    this.timerId = setTimeout(() => {
      console.log(`💥 炸弹 ${bombName}：爆炸啦！`);
    }, 3000);
  };

  /**
   * 取消炸弹：清除定时器
   * @param {string} bombName - 炸弹名称
   */
  this.clear = function (bombName) {
    // 若定时器存在（已启动且未爆炸），则清除定时器
    if (this.timerId) {
      clearTimeout(this.timerId);
      this.timerId = null; // 清除后重置定时器 ID
      console.log(`✅ 炸弹 ${bombName}：已取消，不会爆炸！`);
    } else {
      console.log(`⚠️  炸弹 ${bombName}：未启动或已爆炸，无需取消！`);
    }
  };
}

// 1. 实例化两个炸弹对象：b1 和 b2
const b1 = new Bomb();
const b2 = new Bomb();

// 2. 启动 b1 和 b2
b1.start('b1');
b2.start('b2');

// 3. 1 秒后取消 b2
setTimeout(() => {
  b2.clear('b2');
}, 1000);

// 补充：输出时间线提示
console.log('\n=== 时间线提示 ===');
console.log('0秒：b1 和 b2 启动');
console.log('1秒：尝试取消 b2');
console.log('3秒：若 b1 未被取消，则爆炸');